import { useEffect, useState } from "react"
import useGetUserInfo from "./useGetUserInfo"
import { useRequest } from "ahooks"
import { getUserInfoService } from "../services/user"
import { useDispatch } from "react-redux"
import { loginReducer } from "../store/userReducer"

/**
 * @description 加载用户的数据
 * @returns 状态（布尔值）  true 表示没有加载完成，false表示加载完成
 */
function useLoadUserData() {
    const dispatch = useDispatch()

    const [waitingUserData, setWaitingUserData] = useState(true)
    // 请求加载完用户信息直接存储至 redux 中，不需要返回用户信息
    const { run } = useRequest(getUserInfoService, {
        manual: true, // 手动调用
        onSuccess(result) {
            // 服务器返回的数据
            const { username, nickname } = result
            // 存储到store中
            dispatch(loginReducer({ username, nickname }))
        },
        // onFinally 不管成功和失败都会执行
        onFinally() {
            setWaitingUserData(false)
        }
    })

    // 先获取用户信息（从redux中获取），判断store中是否已经存在用户信息
    const { username } = useGetUserInfo()

    useEffect(() => {
        if (username) {
            // 如果有用户信息就不需要重新请求用户信息
            setWaitingUserData(false)
            return
        }
        // 如果store中没有用户信息，则进行请求加载
        run()
    }, [username])

    return { waitingUserData }
}

export default useLoadUserData
